package com.logistica.metropolitana.converters;

import java.math.BigDecimal;
import java.util.List;

import com.google.common.collect.Lists;
import com.logistica.metropolitana.db.model.AeConstatarSitio;
import com.logistica.metropolitana.db.model.AeEquInstalado;
import com.logistica.metropolitana.db.model.AeImagene;
import com.logistica.metropolitana.db.model.AeObservacione;
import com.logistica.metropolitana.db.model.AePaiExterno;
import com.logistica.metropolitana.db.model.AePaiInterno;
import com.logistica.metropolitana.db.model.AePrueba;
import com.logistica.metropolitana.db.model.AeSitio;
import com.logistica.metropolitana.db.model.AeVisita;
import com.logistica.metropolitana.exceptions.ActaDeEntregaException;
import com.logistica.metropolitana.utils.TimeUtils;
import com.logistica.metropolitana.utils.Utils;
import com.logistica.metropolitana.web.views.AEImagenView;
import com.logistica.metropolitana.web.views.ActaDeEntregaView;
import com.logistica.metropolitana.web.views.ConstatarSitioView;
import com.logistica.metropolitana.web.views.EquipoInstaladoView;
import com.logistica.metropolitana.web.views.ObservacionView;
import com.logistica.metropolitana.web.views.PaiExternoView;
import com.logistica.metropolitana.web.views.PaiInternoView;
import com.logistica.metropolitana.web.views.PruebaView;
import com.logistica.metropolitana.web.views.VisitaView;

public class ActaDeEntregaConverter {

	public ActaDeEntregaView convertAeSitioEntityToView(AeSitio entity) throws ActaDeEntregaException {
		ActaDeEntregaView view = new ActaDeEntregaView();
		try{
			if(entity != null){
				view.setGid(String.valueOf(entity.getGid()));
				view.setCai(entity.getCai());
				view.setNombreSitio(entity.getNombreSitio());
				view.setAnchoBanda(entity.getAnchoDeBanda());
				view.setInstitucion(entity.getInstitucion());
				view.setTipoSitio(entity.getTipoSitio());
				view.setLatitud(entity.getLatitud()!= null ?entity.getLatitud().toPlainString():"");
				view.setLongitud(entity.getLongitud()!=null?entity.getLongitud().toPlainString():"");
				view.setUsuario(entity.getElaboro());
				view.setStatus(entity.getEstatus());
				view.setFecha(TimeUtils.convertJavaDateToStringDate(entity.getFecha()));
				
				view.setCalle(entity.getCalle());
				view.setNumExt(entity.getNumExt());
				view.setNumInt(entity.getNumInt());
				view.setCiudad(entity.getCiudad());
				view.setColonia(entity.getColonia());
				view.setMunicipio(entity.getMunicipio());
				view.setEstado(entity.getEstado());
				view.setEntreCalles(entity.getEntreCalles());
				view.setCp(entity.getCp()!=null?String.valueOf(entity.getCp()):"");
				
				view.setExisteDispositivo(entity.getExisteDisp()!=null?(entity.getExisteDisp()?"s" : "n"):"");
				view.setEnFuncionamiento(entity.getEnFunc()!=null?(entity.getEnFunc()?"s":"n"):"");
				view.setTelefono(entity.getTelefono());
				view.setLicitacion(entity.getLicitacion());
				view.setTipoDeFormato(entity.getTipoDeFormato());
			}			
		}catch(Exception e){
			ActaDeEntregaException aException = new ActaDeEntregaException(e, 
					ActaDeEntregaException.LAYER_CONVERTER, ActaDeEntregaException.ACTION_CONVERTER);
			throw aException;
		}						
		return view;
	}
	
	public VisitaView convVisitaEntityToView(AeVisita entity) throws ActaDeEntregaException {
		VisitaView visitaView = new VisitaView();
		try{
			if(entity != null){
				visitaView.setVisitaId(entity.getIdVisita().toString());
				visitaView.setFolio(entity.getFolioVisita().toString());
				visitaView.setObservacion(entity.getObservacion());
				visitaView.setFecha(TimeUtils
						.convertJavaDateToStringDate(entity.getFecha()));
				switch(entity.getNumVisita()){
					case 1 : visitaView.setVisita("Primera");
						break;
					case 2 : visitaView.setVisita("Segunda");
						break;
					case 3 : visitaView.setVisita("Tercera");
						break;						
				}				
			}			
		}catch(Exception e){
			ActaDeEntregaException aException = new ActaDeEntregaException(e, 
					ActaDeEntregaException.LAYER_CONVERTER, ActaDeEntregaException.ACTION_CONVERTER);
			throw aException;
		}
		return visitaView;
	}
	
	public EquipoInstaladoView convEquInstEntityToView(AeEquInstalado entity) throws ActaDeEntregaException {
		EquipoInstaladoView view = new EquipoInstaladoView();
		try{
			if(entity != null){
				view.setEquipoInstaladoId(entity.getIdEquinst().toString());
				view.setMarca(entity.getMarca());
				view.setModelo(entity.getModelo());
				view.setIpHomo(entity.getIpHomo());
				if(entity.getTipoEquipo()!=null){
					switch(entity.getTipoEquipo()){
						case "MO" : view.setTipoEquipo("Modem");
							break;
						case "PI" : view.setTipoEquipo("PAI Interno");
							break;
						case "PE" : view.setTipoEquipo("PAI Externo");
							break;
						case "FW" : view.setTipoEquipo("Firewall");
							break;
					}
				}	
			}
		}catch(Exception e){
			ActaDeEntregaException aException = new ActaDeEntregaException(e, 
					ActaDeEntregaException.LAYER_CONVERTER, ActaDeEntregaException.ACTION_CONVERTER);
			throw aException;
		}
		return view;
	}
	
	public PruebaView convPuebaEntityToView(AePrueba entity) throws ActaDeEntregaException {
		PruebaView view = new PruebaView();
		try{
			if(entity != null){
				view.setPruebaId(entity.getIdPruebas().toString());
				view.setPortalAcceso(entity.getPortalAcceso()?"s":"n");
				view.setConectividad(entity.getConectividad()?"s":"n");
				view.setVelCarga(entity.getVelCarga());
				view.setVelDescarga(entity.getVelDesc());
				view.setCargaFTPCompleta(entity.getFtpCompleto()?"s":"n");
				view.setFiltroContenido(entity.getFiltro()?"s":"n");
				view.setUrl(entity.getUrl());
				view.setCatContenido(entity.getCatCont());
			}
		}catch(Exception e){
			ActaDeEntregaException aException = new ActaDeEntregaException(e, 
					ActaDeEntregaException.LAYER_CONVERTER, ActaDeEntregaException.ACTION_CONVERTER);
			throw aException;
		}
		return view;
	}
	
	public PaiInternoView convPaiInternoEntityToView(AePaiInterno entity) throws ActaDeEntregaException {
		PaiInternoView view = new PaiInternoView();
		try{
			if(entity != null){
				view.setPaiinternoId(entity.getIdPaii().toString());
				view.setPortalAcceso(entity.getPaiiPortalAcceso()?"s":"n");
				view.setConectividad(entity.getPaiiConectividad()?"s":"n");
				view.setAccesoConContrasena(entity.getPaiiPaPassword()?"s":"n");
				view.setContrasena(entity.getPaiiCatCont());
				view.setFiltroContenido(entity.getPaiiFiltro()?"s":"n");
				view.setUrl(entity.getPaiiUrl());
				view.setCatContenido(entity.getPaiiCatCont());
				view.setSsidVisible60m(entity.getSsid60mVisible()?"s":"n");
			}			
		}catch(Exception e){
			ActaDeEntregaException aException = new ActaDeEntregaException(e, 
					ActaDeEntregaException.LAYER_CONVERTER, ActaDeEntregaException.ACTION_CONVERTER);
			throw aException;
		}
		return view;
	}
	
	public PaiExternoView convPaiExternoEntityToView(AePaiExterno entity) throws ActaDeEntregaException {
		PaiExternoView view = new PaiExternoView();
		try{
			if(entity != null){
				view.setPaiexternoId(entity.getIdPaie().toString());
				view.setPortalAcceso(entity.getPaiePortalAcceso()?"s":"n");
				view.setConectividad(entity.getPaieConectividad()?"s":"n");
				view.setAccesoSinContrasena(entity.getPaiePuntoAcceso()?"s":"n");
				view.setFiltroContenido(entity.getPaieFiltro()?"s":"n");
				view.setUrl(entity.getPaieUrl());
				view.setCatContenido(entity.getPaieCatCont());
				view.setSsid60m(Utils.coberturaPAIEToView(entity.getSsid60m()));
				view.setSsid250m(Utils.coberturaPAIEToView(entity.getSsid250m()));
			}
		}catch(Exception e){
			ActaDeEntregaException aException = new ActaDeEntregaException(e, 
					ActaDeEntregaException.LAYER_CONVERTER, ActaDeEntregaException.ACTION_CONVERTER);
			throw aException;
		}
		return view;
	}		
	
	public ConstatarSitioView convConstSitioEntityToView(AeConstatarSitio entity) throws ActaDeEntregaException {
		ConstatarSitioView view = new ConstatarSitioView();
		try{
			if(entity != null){
				view.setConstatarId(entity.getIdConstatar().toString());
				view.setManualUsuario(entity.getEntregaManual()?"s":"n");
				view.setReparar(entity.getReparacion()?"s":"n");
				List<ObservacionView> observaciones = Lists.newArrayList();
				if(!entity.getAeObservaciones().isEmpty()){					
					for (AeObservacione obs : entity.getAeObservaciones()) {
						observaciones.add(new ObservacionView(
								obs.getIdObservacion().toString(), obs.getObservacion()));
					}
				}
				view.setObservaciones(observaciones);
			}			
		}catch(Exception e){
			ActaDeEntregaException aException = new ActaDeEntregaException(e, 
					ActaDeEntregaException.LAYER_CONVERTER, ActaDeEntregaException.ACTION_CONVERTER);
			throw aException;
		}
		return view;
	}
	
	public AEImagenView convImagenEntityToView(AeImagene entity) throws ActaDeEntregaException {
		AEImagenView view = new AEImagenView();
		try{
			if(entity != null){
				view.setBytes(entity.getImagen());
				view.setPosicion(entity.getPosicion());
				view.setSeccion(entity.getNombreSeccion());
				view.setLength(entity.getLongitud());
				view.setName(entity.getNombreArchivo());
				view.setType(entity.getTipoArchivo());
			}			
		}catch(Exception e){
			ActaDeEntregaException aException = new ActaDeEntregaException(e, 
					ActaDeEntregaException.LAYER_CONVERTER, ActaDeEntregaException.ACTION_CONVERTER);
			throw aException;
		}
		return view;
	}
	
	/////////////////////////////////////////////////////////
	//             Views To Entities	
	/////////////////////////////////////////////////////////
	
	public AeSitio convSitioViewToEntity(ActaDeEntregaView view) throws ActaDeEntregaException {
		AeSitio entity = new AeSitio();
		try{
			if(view != null){
				entity.setGid(new Long(view.getGid()));
				entity.setCai(view.getCai());
				entity.setAnchoDeBanda(view.getAnchoBanda());
				entity.setNombreSitio(view.getNombreSitio());
				entity.setInstitucion(view.getInstitucion());
				entity.setEstatus(view.getStatus());
				entity.setTipoSitio(view.getTipoSitio().replaceFirst(",",""));
				entity.setTipoDeFormato(view.getTipoDeFormato());				
				entity.setLatitud(new BigDecimal(view.getLatitud()));
				entity.setLongitud(new BigDecimal(view.getLongitud()));
				entity.setCalle(view.getCalle());
				entity.setNumExt(view.getNumExt());
				entity.setNumInt(view.getNumInt());
				entity.setColonia(view.getColonia());
				entity.setCiudad(view.getCiudad());
				entity.setMunicipio(view.getMunicipio());
				entity.setEstado(view.getEstado());
				entity.setEntreCalles(view.getEntreCalles());
				entity.setCp(Integer.parseInt(view.getCp()));
				entity.setFecha(TimeUtils.convertStringToDate(view.getFecha() , TimeUtils.DATE_PATTERN_DDMMYYYY));
				entity.setExisteDisp(Utils.siNo(view.getExisteDispositivo()));
				entity.setEnFunc(Utils.siNo(view.getEnFuncionamiento()));
				entity.setElaboro(view.getUsuario());
				entity.setResponsable(view.getResponsable());
				entity.setTelefono(view.getTelefono());
				entity.setLicitacion(view.getLicitacion());
				entity.setTipoDeFormato(view.getTipoDeFormato());
			}
		}catch(Exception e){
			ActaDeEntregaException aException = new ActaDeEntregaException(e, 
					ActaDeEntregaException.LAYER_CONVERTER, ActaDeEntregaException.ACTION_CONVERTER);
			throw aException;
		}
		return entity;
	}
	
	public AeVisita convVisitaViewToEntity(VisitaView view, AeSitio aeSitio) throws ActaDeEntregaException {
		AeVisita entity = new AeVisita();
		try{
			if(view != null){
				if(view.getVisitaId()!=null){
					entity.setIdVisita(new Long(view.getVisitaId()));
				}	
				Long folio = new Long(0);
				if(view.getFolio()!=null){
					if(view.getFolio().length()>0){
						folio =new Long(view.getFolio());
					}
				}
				entity.setAeSitio(aeSitio);
				entity.setFolioVisita(folio);
				if(view.getFecha()!=null){
					if(view.getFecha().length()>0){
						entity.setFecha(TimeUtils.convertStringToDate(view.getFecha(), "yyyy-MM-dd"));
					}
				}	
				entity.setNumVisita(Utils.visita(view.getVisita()));
				entity.setObservacion(view.getObservacion());
			}
		}catch(Exception e){
			ActaDeEntregaException aException = new ActaDeEntregaException(e, 
					ActaDeEntregaException.LAYER_CONVERTER, ActaDeEntregaException.ACTION_CONVERTER);
			throw aException;
		}
		return entity;		
	}
	
	public AePrueba convPruebaViewToEntity(PruebaView view, AeSitio aeSitio) throws ActaDeEntregaException {
		AePrueba entity = new AePrueba();
		try{
			if(view != null){
				entity.setAeSitio(aeSitio);
				if(view.getPruebaId()!=null){
					entity.setIdPruebas(new Long(view.getPruebaId()));
				}
				entity.setPortalAcceso(Utils.siNo(view.getPortalAcceso()));
				entity.setConectividad(Utils.siNo(view.getConectividad()));
				entity.setVelCarga(view.getVelCarga());
				entity.setVelDesc(view.getVelDescarga());
				entity.setFtpCompleto(Utils.siNo(view.getCargaFTPCompleta()));
				entity.setFiltro(Utils.siNo(view.getFiltroContenido()));
				entity.setUrl(view.getUrl());
				entity.setCatCont(view.getCatContenido());
			}
		}catch(Exception e){
			ActaDeEntregaException aException = new ActaDeEntregaException(e, 
					ActaDeEntregaException.LAYER_CONVERTER, ActaDeEntregaException.ACTION_CONVERTER);
			throw aException;
		}
		return entity;
	}
	
	public AePaiInterno convPaiIntViewToEntity(PaiInternoView view , AeSitio aeSitio) throws ActaDeEntregaException {
		AePaiInterno entity = new AePaiInterno();
		try{
			if(view != null){
				entity.setAeSitio(aeSitio);
				if(view.getPaiinternoId()!=null){
					entity.setIdPaii(new Long(view.getPaiinternoId()));
				}
				entity.setPaiiPortalAcceso(Utils.siNo(view.getPortalAcceso()));
				entity.setPaiiConectividad(Utils.siNo(view.getConectividad()));
				entity.setPaiiPaPassword(Utils.siNo(view.getAccesoConContrasena()));
				String pass = "";
				if(entity.getPaiiPaPassword()==true){
					pass = view.getContrasena();
				}
				entity.setPaiiPassword(pass);
				entity.setPaiiFiltro(Utils.siNo(view.getFiltroContenido()));
				entity.setPaiiUrl(view.getUrl());
				entity.setPaiiCatCont(view.getCatContenido());
				entity.setSsid60mVisible(Utils.siNo(view.getSsidVisible60m()));
			}
		}catch(Exception e){
			ActaDeEntregaException aException = new ActaDeEntregaException(e, 
					ActaDeEntregaException.LAYER_CONVERTER, ActaDeEntregaException.ACTION_CONVERTER);
			throw aException;
		}
		return entity;
	}
	
	public AePaiExterno convPaiExtViewToEntity(PaiExternoView view, AeSitio aeSitio) throws ActaDeEntregaException {
		AePaiExterno entity = new AePaiExterno();
		try{
			if(view != null){
				entity.setAeSitio(aeSitio);
				if(view.getPaiexternoId()!=null){
					entity.setIdPaie(new Long(view.getPaiexternoId()));
				}	
				entity.setPaiePortalAcceso(Utils.siNo(view.getPortalAcceso()));
				entity.setPaieConectividad(Utils.siNo(view.getConectividad()));
				entity.setPaiePuntoAcceso(Utils.siNo(view.getAccesoSinContrasena()));
				entity.setPaieFiltro(Utils.siNo(view.getFiltroContenido()));
				entity.setPaieUrl(view.getUrl());
				entity.setPaieCatCont(view.getCatContenido());
				entity.setSsid60m(Utils.coberturaPAIEToEntity(view.getSsid60m()));
				entity.setSsid250m(Utils.coberturaPAIEToEntity(view.getSsid250m()));
			}
		}catch(Exception e){
			ActaDeEntregaException aException = new ActaDeEntregaException(e, 
					ActaDeEntregaException.LAYER_CONVERTER, ActaDeEntregaException.ACTION_CONVERTER);
			throw aException;
		}
		return entity;
	}
	
	public AeConstatarSitio convConstSitioViewToEntity(ConstatarSitioView view, AeSitio aeSitio) throws ActaDeEntregaException {
		AeConstatarSitio entity = new AeConstatarSitio();
		try{
			if(view != null){
				entity.setAeSitio(aeSitio);
				if(view.getConstatarId()!=null){
					entity.setIdConstatar(new Long(view.getConstatarId()));
				}	
				entity.setEntregaManual(Utils.siNo(view.getManualUsuario()));
				entity.setReparacion(Utils.siNo(view.getReparar()));
				List<AeObservacione> observacioens = Lists.newArrayList();
				if(!view.getObservaciones().isEmpty()){
					for(ObservacionView observ : view.getObservaciones()){
						if(observ != null){
							AeObservacione ob = new AeObservacione();
							ob.setObservacion(observ.getObservacion());
							observacioens.add(ob);
						}
					}
					entity.setAeObservaciones(observacioens);
				}
			}
		}catch(Exception e){
			ActaDeEntregaException aException = new ActaDeEntregaException(e, 
					ActaDeEntregaException.LAYER_CONVERTER, ActaDeEntregaException.ACTION_CONVERTER);
			throw aException;
		}
		return entity;
	}
	
	public AeEquInstalado convEquInstViewToEntity(EquipoInstaladoView view , AeSitio aeSitio, int update) throws ActaDeEntregaException {
		AeEquInstalado entity = new AeEquInstalado();
		try{
			if(view != null){
				entity.setIdEquinst(null);
				if(update==1){
					if(view.getEquipoInstaladoId()!=null){
						if(view.getEquipoInstaladoId().length()>0){
							entity.setIdEquinst(new Long(view.getEquipoInstaladoId()));
						}	
					}	
				}
				entity.setAeSitio(aeSitio);
				entity.setMarca(view.getMarca());
				entity.setModelo(view.getModelo());
				entity.setIpHomo(view.getIpHomo());
				entity.setTipoEquipo(Utils.tipoEquipo(view.getTipoEquipo()));
			}
		}catch(Exception e){
			ActaDeEntregaException aException = new ActaDeEntregaException(e, 
					ActaDeEntregaException.LAYER_CONVERTER, ActaDeEntregaException.ACTION_CONVERTER);
			throw aException;
		}
		return entity;
	}
	
	public AeImagene convImagenViewToEntity(AEImagenView view , AeSitio aeSitio) throws ActaDeEntregaException {
		AeImagene entity = new AeImagene();
		try{
			if(view != null){
				entity.setAeSitio(aeSitio);
				entity.setNombreSeccion("Sección " + view.getPosicion());
				entity.setPosicion(view.getPosicion());
				entity.setImagen(view.getBytes());
				entity.setLongitud(view.getLength());
				entity.setNombreArchivo(view.getName());
				entity.setTipoArchivo(view.getType());
			}			
		}catch(Exception e){
			ActaDeEntregaException aException = new ActaDeEntregaException(e, 
					ActaDeEntregaException.LAYER_CONVERTER, ActaDeEntregaException.ACTION_CONVERTER);
			throw aException;
		}
		return entity;
	}
	
}